package com.shopping.mall.core.module.user.service;

import com.shopping.mall.auth.VO.EnterpriseVo;
import com.shopping.mall.auth.VO.UserVo;
import com.shopping.mall.base.http.Result;
import com.shopping.mall.core.module.user.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * User服务类
 * </p>
 *
 * @author zzy
 * @date 2021-07-27
 */
public interface UserService extends IService<User> {

    /**
     * 发送邮箱验证码
     *
     * @param mailToAddress : 邮件的接收地址
     * @return Result<Object>
     */
    Result<Object> registerSendMail(String mailToAddress);

    /**
     * 注册
     *
     * @param userVo: 注册信息
     * @return Result<Object>
     */
    Result<Object> register(UserVo userVo);

    /**
     * 登录
     *
     * @param userVo : 登录信息
     * @return Result<Object>
     */
    Result<Object> login(UserVo userVo);

    /**
     * 查看个人信息
     *
     * @return
     */
    Result<Object> userInfo();

    /**
     * 退出登录
     *
     * @return Result<Object>
     */
    Result<Object> logout();

    /**
     * 刷新token
     *
     * @param refreshToken: refreshToken
     * @return Result<Object>
     */
    Result<Object> refreshToken(String refreshToken);

    /**
     * 修改密码
     *
     * @param userVo : 用户信息
     * @return Result<Object>
     */
    Result<Object> changePassword(UserVo userVo);

    /**
     * 修改个人信息
     *
     * @param userVo : 用户信息
     * @return Result<Object>
     */
    Result<Object> changeUserInfo(UserVo userVo);

    /**
     * 发送忘记密码验证码
     *
     * @return Result<Object>
     * @param email
     */
    Result<Object> sendForgetMail(String email);

    /**
     * 发送换绑时解除邮箱绑定验证码
     *
     * @return Result<Object>
     */
    Result<Object> sendUnbindMail();

    /**
     * 发送绑定新邮箱验证码
     *
     * @param newMail : 邮件的接收地址
     * @return Result<Object>
     */
    Result<Object> sendBindMail(String newMail);

    /**
     * 邮箱换绑
     *
     * @param newMail: 新的邮箱地址
     * @param unBindCode: 解绑验证码
     * @param bindCode:   绑定验证码
     * @return Result<Object>
     */
    Result<Object> changeBindMail(String newMail, String unBindCode, String bindCode);

    /**
     * 忘记密码时的重置密码,需要邮箱验证码校验
     *
     * @param userVo: 用户信息
     * @return Result<Object>
     */
    Result<Object> resetPassword(UserVo userVo);

    /**
     * 申请成为企业用户
     *
     * @param enterpriseVo: 企业用户表
     * @return Result<Object>
     */
    Result<Object> applyEnterpriseUser(EnterpriseVo enterpriseVo);

    /**
     * 分页查询
     *
     * @param current：页码
     * @param size：每页条数
     * @param user：筛选条件
     * @return IPage<User>
     */
    IPage<User> getUserPage(Integer current, Integer size, User user);

    /**
     * 查询所有
     *
     * @param user：筛选条件
     * @return List<User>
     */
    List<User> getAll(User user);

    /**
     * 通过id删除
     *
     * @param id：userId
     * @return Result<Object>
     */
    Result<Object> deleteById(String id);

    /**
     * 批量删除
     *
     * @param ids：id列表
     * @return Result<Object>
     */
    Result<Object> batchDelete(List<String> ids);
}
